/**
 *  函数指针
 *    定义函数指针
 *        typedef 返回值类型 (* 指针变量) (参数)
 *
 *   调用
 *       指针变量(实参)
 *
 * @author: caoshi
 * @date: 2021/5/9 9:22
 */

#include <stdio.h>
#include <stdlib.h>

int add(int, int);

int sub(int, int);

// 定义函数指针, opera 是一个指向 返回值是int类型, 参数是两个int的(函数)指针
typedef int (*opera)(int, int);

int compute(opera, int, int);

int add(int a, int b) {
    return a + b;
}

int sub(int a, int b) {
    return a - b;
}

// 函数指针作为参数
int compute(opera op, int x, int y) {
    return op(x, y);
}

// 返回值是函数指针
opera getOperByCode(char code) {
    opera op = NULL;
    switch (code) {
        case '+': op = add;
            break;
        case '-': op = sub;
            break;
        default: op = add;
    }
    return op;
}




int main() {
    char code = '+';
    opera  op = getOperByCode(code);

    int res = compute(op, 2, 3);

    printf("res = %d\n", res);
    return 0;
}
